Contemporary browsers and other applications allow plug-ins, which in general comprise hosted software code that interacts with the hosting browser/application to provide additional functionality. One reason for using plug-ins is to increase security; the hosting browser limits the actions that the hosted code (which is generally untrusted) can perform. The Internet has become very dangerous, with malicious websites often attempting to cause a user to download and run harmful code that may damage the user's computer system or destroy the user's data. Thus, web browsers often include restrictions on the code that can run, and the plug-ins that can perform actions on the user's computer system. Plug-ins increase the size of the sandbox provided by the browser, because they allow more functionality on the web while decreasing the number of untrusted applications installed. One such plug-in is Microsoftt® Silverlight™, which provides a platform that allows application developers to create rich web applications hosted in the browser that typically include animation, vector graphics, and/or media (e.g., audio/video) content playback. Another example plug-in is Adobe® Flash™.
Mobile devices, such as cell phones and MP3 players, traditionally have had limited graphics capabilities. Early devices were limited to monochrome, two-dimensional graphics for displaying text and simple icons. Later devices added color, but advanced graphics (e.g., three-dimensional rendering, transparency) were still beyond the capabilities of most mobile devices. Not only are the central processing units (CPUs) of many modern mobile devices catching up with desktop counterparts, some mobile devices include graphics processing units (GPUs).
Unfortunately, mobile devices have varying CPU and GPU capabilities. Software designed to run on various mobile devices may operate with a wide variety of hardware support. For example, some mobile devices on which the software runs may not have a GPU. As another example, the CPU of some mobile devices may not include advanced graphical instructions sets, such as Single Instruction Multiple Data (SIMD) extensions. While implementing graphical applications for these constrained devices, application developers often target the least common denominator, leading to slow progress of mobile applications. When implementing presentation middleware like Microsoft Silverlight, targeting the least common denominator leads to poor performance on high-end devices. On the other hand, supporting different capabilities on different devices leads to a more complex runtime of larger size for handling each of the variations.
In addition, as mobile device CPU and GPU capabilities have increased, the limitations of other parts of the devices have become bottlenecks. For example, mobile device bus speeds are often a fraction of their desktop counterparts. While a modern mobile device can process data as fast as desktop computers of several years ago, the device often cannot read and write data from memory fast enough to keep the CPU and GPU busy or utilize these components to their full potential.